package weixin.app.domain

import java.util.Date
import wechat.base.snd.WCTemplateContent
import weixin.app.WXServiceAppFactoryDemo

import static weixin.app.domain.MeetingNotifyWeiXin.*
import java.io.File
import wechat.base.snd.QRCodeManager
import wechat.base.snd.QRCode
import org.json.JSONObject

class MeetingNotifyWeiXin {
	private static String TEMPLATE_MEETING_MSG_ID = "s6Sd6VvtCjNOAzx1Y3Ow5Os9xEAqcSUiRxEhDV6OexE";// Meeting
	private static String SERVICE_APP_MEETING_DETAIL_URL_PREFIX = "http://js.gwaycloud.com/wx/meetingdetail?notificationid="; //jinshan
	

//id  s6Sd6VvtCjNOAzx1Y3Ow5Os9xEAqcSUiRxEhDV6OexE
//开发者调用模板消息接口时需提供模板ID
//标题会议通知
//行业政府与公共事业 - 政府|公共事业|非盈利机构
//详细内容
//{{first.DATA}}
//会议时间：{{keyword1.DATA}}
//会议主题：{{keyword2.DATA}}
//会议地点：{{keyword3.DATA}}
//{{remark.DATA}}
//在发送时，需要将内容中的参数（{{.DATA}}内为参数）赋值替换为需要的信息
//内容示例
//你好
//会议时间：2015年7月10日
//会议主题：户籍相关会议
//会议地点：丰产路派出所5楼501
//请按时参加会议。
  
	//会议通知
	def static meetingNotify(Iterable<String> openids, Date time, String location, String title, String notification_id){
		println("=============> weixin.app.domain.MeetingNotifyWeiXin.meetingNotify is called")
		WXServiceAppFactoryDemo::serviceApp=>[
			createTemplateNews()=>[
				withTempId(TEMPLATE_MEETING_MSG_ID)									
				withData(new WCTemplateContent()=>[
					withFirstItem('你好,请关注以下会议通知')
					withKeyword1Item(TimeFormatter::dateFormat(time))
					withKeyword2Item(title)
					withKeyword3Item(location)
					withRemarkItem("请按时参加会议")
				])
				withUrl(SERVICE_APP_MEETING_DETAIL_URL_PREFIX+notification_id)
				send2Users(openids)
			]
		]
	}	
}
class DocumentDeliveryNotifyWeiXin {
	private static String TEMPLATE_DOCUMENT_DELIVER_MSG_ID = "4HW8NYu6VyRafOPAJdMlQ3FOqnSM0ZQnW21UUJ9Z72Y";// Document
	private static String SERVICE_APP_DOCUMENT_DELIVER_URL_PREFIX = "http://js.gwaycloud.com/wx/documentdetail?notificationid="; //jinshan
//{{first.DATA}}
//业务类型：{{keyword1.DATA}}
//业务时间：{{keyword2.DATA}}
//业务内容：{{keyword3.DATA}}
//{{remark.DATA}}
//您好
//业务类型：计划下达
//业务时间：2015-03-12
//业务内容：用于2015年3月“往来款“项目的1950元用款计划已于2015-03-12 16:42:14批复，单号为：PL201503120035。
//如有疑问，请联系业务人员
	def static documentDeliverNotify(Iterable<String> openids, Date time, String title, String notification_id){
		println("=============> weixin.app.domain.DocumentDeliveryNotifyWeiXin.documentDeliverNotify is called")
		WXServiceAppFactoryDemo::serviceApp=>[
		createTemplateNews()=>[
				withTempId(TEMPLATE_DOCUMENT_DELIVER_MSG_ID)									
				withData(new WCTemplateContent()=>[
					withFirstItem('你好,请关注以下通知')
					withKeyword1Item('文件下达')
					withKeyword2Item(TimeFormatter::dateFormat(time))
					withKeyword3Item(title)
					withRemarkItem("请在系统中下载学习")
				])
				withUrl(SERVICE_APP_DOCUMENT_DELIVER_URL_PREFIX+notification_id)
				send2Users(openids)
				println("message body is "+ str)
				println("message user (" + openids.size + " users) is as follows")
				openids.forEach[
					println(it)
				]
			]
		]
		
	}	
}


//申请第一阶段，首先对于今年需要申请的企业（即下次评审的申请时间的年度是今年的企业）
//在今年的3月1日发个消息通知，通知该企业今年需要准备开展标准化评审工作。
class StandardQualificationNotifyWeiXin {
	private static String TEMPLATE_DOCUMENT_DELIVER_MSG_ID = "4HW8NYu6VyRafOPAJdMlQ3FOqnSM0ZQnW21UUJ9Z72Y";// Document
	private static String SERVICE_APP_DOCUMENT_DELIVER_URL_PREFIX = "http://js.gwaycloud.com/documentdetail?notificationid="; //jinshan
//{{first.DATA}}
//业务类型：{{keyword1.DATA}}
//业务时间：{{keyword2.DATA}}
//业务内容：{{keyword3.DATA}}
//{{remark.DATA}}
//您好
//业务类型：计划下达
//业务时间：2015-03-12
//业务内容：用于2015年3月“往来款“项目的1950元用款计划已于2015-03-12 16:42:14批复，单号为：PL201503120035。
//如有疑问，请联系业务人员
	def static standardQualificationNotifyNotify(Iterable<String> openids, Date time, String title, String notification_id){
		println("=============> weixin.app.domain.StandardQualificationNotifyWeiXin.standardQualificationNotifyNotify is called")
		WXServiceAppFactoryDemo::serviceApp=>[
		createTemplateNews()=>[
				withTempId(TEMPLATE_DOCUMENT_DELIVER_MSG_ID)									
				withData(new WCTemplateContent()=>[
					withFirstItem('你好,请关注以下通知')
					withKeyword1Item('标准化评审通知')
					withKeyword2Item(TimeFormatter::dateFormat(time))
					withKeyword3Item('请准备开展本年度标准化评审工作')
//					withRemarkItem("")
				])
				withUrl("")
				send2Users(openids)
				openids.forEach[
					println(it)
				]
			]
		]
		
	}	
}

//若到期还未提交检测报告，将通过微信端提醒。
class HarzardCheckDueNotifyWeiXin {
	private static String TEMPLATE_DOCUMENT_DELIVER_MSG_ID = "4HW8NYu6VyRafOPAJdMlQ3FOqnSM0ZQnW21UUJ9Z72Y";// Document
	private static String SERVICE_APP_DOCUMENT_DELIVER_URL_PREFIX = "http://js.gwaycloud.com/documentdetail?notificationid="; //jinshan
//{{first.DATA}}
//业务类型：{{keyword1.DATA}}
//业务时间：{{keyword2.DATA}}
//业务内容：{{keyword3.DATA}}
//{{remark.DATA}}
//您好
//业务类型：计划下达
//业务时间：2015-03-12
//业务内容：用于2015年3月“往来款“项目的1950元用款计划已于2015-03-12 16:42:14批复，单号为：PL201503120035。
//如有疑问，请联系业务人员
	def static harzardCheckReportNotify(Iterable<String> openids, Date time, String company_name, Date duedate){
		println('===========>HarzardCheckDueNotifyWeiXin is sending message to '+ company_name)
		WXServiceAppFactoryDemo::serviceApp=>[
		createTemplateNews()=>[
				withTempId(TEMPLATE_DOCUMENT_DELIVER_MSG_ID)									
				withData(new WCTemplateContent()=>[
					withFirstItem('你好,'+company_name+'!请关注以下提醒:')
					withKeyword1Item('逾期未提交年度检测报告提醒')
					withKeyword2Item(TimeFormatter::dateFormat(time))
					withKeyword3Item('您逾期未提交本年度检测报告!')
					withRemarkItem( '你的检测报告提交截止日期是'+TimeFormatter::dateFormat(duedate)+'。')
				])
				withUrl("")
				send2Users(openids)
				openids.forEach[
					println(it)
				]
			]
		]
		
	}	
}


class WXUserManager{
	def static String getUserName(String openid){
		var String name=null
		val jo = new JSONObject(WXServiceAppFactoryDemo::serviceApp.getDetailedUserInfo(openid))
		try {
			name = jo?.getString('nickname')
		} catch (Exception e) {
			e.printStackTrace();
		}
		name
	}
}
class WeixinQR{
	//获取带信息的二维码文件
	def static File getQRCodeFile(String code){
		try{
		 	val m = new QRCodeManager(WXServiceAppFactoryDemo::serviceApp) 
			 m.genPermTicket(new QRCode(code)).getTicket("company_"+code)
		 }
		catch(Exception e){
			println("======ERROR=======>Failed to get QR code!")
			e.printStackTrace
			null
		 }		 
	}
}


class WXCommonMessage {
	def static sendCommonTxtMessage(String sender, Iterable<String> openids, String content) {
		println("=============> weixin.app.domain.WXCommonMessage.sendCommonTxtMessage is called")
		WXServiceAppFactoryDemo::serviceApp=>[
		createTxtMessage()=>[								
				withContent(content)
				withMsgType("text")
				send2Users(openids)
				openids.forEach[
					println(it)
				]
			]
		]
		
	}
}
